from django.db import models
from goods.models import Good
from users.models import User


# 优惠类型
# type_name  varchar(30)  '优惠类型名称'
class CouponType(models.Model):
    """
    优惠类型
    """
    type_name = models.CharField(max_length=30, verbose_name='优惠类型名称')

    def __str__(self):
        return self.type_name

    class Meta:
        db_table = 'coupon_type'
        verbose_name_plural = "优惠券类型"


# 优惠券
# name varchar(100) '优惠券名称'
# brief  text  '优惠券介绍'
# coupon_type fk  允许空
# good fk 可用于商品
# coupon_num int  '数量'
# start_time 开始使用时间
# over_time   结束使用时间
# start_get_time 领券开始时间
# end_get_time   领券结束时间
# remark 备注 varchar(300)
class Coupon(models.Model):
    """优惠券"""
    name = models.CharField(max_length=100, verbose_name='优惠券名称')
    brief = models.TextField(verbose_name='优惠券介绍', default="")
    coupon_type = models.ForeignKey(CouponType, on_delete=models.CASCADE, blank=True, null=True, verbose_name="优惠券类型")
    good = models.ForeignKey(Good, on_delete=models.CASCADE, verbose_name='单个商品', blank=True, null=True)
    coupon_num = models.IntegerField(verbose_name='数量', default=0)
    start_time = models.DateTimeField(verbose_name='优惠券开始使用时间')
    over_time = models.DateTimeField(verbose_name='优惠券结束使用时间')
    start_get_time = models.DateTimeField(verbose_name='开始领卷的时间')
    end_get_time = models.DateTimeField(verbose_name='领卷的结束时间')
    remark = models.CharField(max_length=300, verbose_name='备注', null=True, blank=True)

    class Meta:
        db_table = 'coupon'
        verbose_name_plural = "优惠券"

    def __str__(self):
        return self.name


# 优惠券 --类型 --具体的值
# coupon fk
# coupon_type fk
# value  int  default 0  "类型具体的值"
class CouponValue(models.Model):
    """
    优惠券类型具体的值
    """
    # 优惠券
    coupon = models.ForeignKey(Coupon, on_delete=models.CASCADE, verbose_name="优惠券")
    # 优惠券类型
    coupon_type = models.ForeignKey(CouponType, on_delete=models.CASCADE, verbose_name="优惠类型")
    # 类型的值
    value = models.IntegerField(verbose_name="类型的值", default=0)

    def __str__(self):
        return "%s:%s:%s"%(self.coupon.name, self.coupon_type.type_name, self.value)

    class Meta:
        db_table = 'coupon_value'
        verbose_name_plural = "优惠券的值"


# 用户领券表
# coupon fk
# user fk
# status  smallint default 0  券的使用状态
# 0 未使用；
# 1 已使用
# 2 已过期

# get_time  领券时间
# use_time  使用时间， 允许null
class UserGetCoupon(models.Model):
    """
    用户领券表
    """
    user = models.ForeignKey(User, verbose_name='用户', on_delete=models.CASCADE)
    coupon = models.ForeignKey(Coupon, on_delete=models.CASCADE, verbose_name="优惠券")

    STATUS_CHOICE = ((0, '未使用'), (1, '已使用'), (2, '已过期'))
    status = models.IntegerField(choices=STATUS_CHOICE, verbose_name='优惠券状态', default=0)
    get_time = models.DateTimeField(verbose_name='领券时间', auto_now_add=True)
    use_time = models.DateTimeField(verbose_name='使用时间', blank=True, null=True)

    class Meta:
        db_table = "user_get_coupon"
        verbose_name_plural = '用户持券表'

    def __str__(self):
        # 用户名:优惠券名称:优惠券状态
        return '%s:%s:%s'%(self.user.username, self.coupon.name, self.get_status_display())